#!/usr/bin/env Python
# coding=utf-8
# 1、导入模块 sqlite3
import sqlite3
import math#向上取整模块

# 2、数据库文件
db_file=r"/Users/zhangdingqu/Documents/CSV/未命名文件夹/shopeemy.sqlite"

#3、获取与数据库的连接
conn=sqlite3.connect(db_file)
cur=conn.cursor()
#列出所有表名
tab_name_list=cur.execute("select name from sqlite_master where type='table' order by name")
print('所有的表名：',tab_name_list.fetchall())

#查询 itemview 表的数据
ALL_data=cur.execute("select * from itemview").fetchall()

tabs=cur.execute(" PRAGMA table_info([itemview])").fetchall()

# 查询分组名称
Grouping_list = cur.execute("select 分組 from itemview").fetchall()
# 得到查询结果后去重结果
Grouping = list(set(Grouping_list))
print('分组名称有:%s' % Grouping)
input_text = input('请输入要处理的分组名称，！！！操作前请注意备份数据库文件，以免误操作，无法恢复：')
# 查询所有字段为input_text的数据
selest_data = cur.execute("select * from itemview where 分組='%s'" % input_text).fetchall()

# 取出查询出的数据的 商品選項 数据列表
Class_ttribute = cur.execute("select 商品編號,商品選項 from itemview where 分組='%s'"%input_text).fetchall()
#插入条数计数器
inst=0
inst_erro=0
dele=0
#===========此代码不适用单规格的商品===================

# print(Class_ttribute)
true='true'
for i in Class_ttribute:
    if i[1] !='':
        #解包
        data=eval(i[1])
        dataRows=list(data[0].keys())[0]
        no1 = data[0][dataRows]

    # if i[0]=='564754421786':
    #     print()
#限制规格数         只有单选项的直接跳过
        if no1.__len__()==1:
            print('跳过1')
            continue

        name=list(no1[0].keys())[0]
       #获取第一部分节点

        specValue = list(no1[0].keys())[1]
        #获取第二部分节点
        no2 = data[1]


    #获得优先值，根据图片定位两项中哪个优先
        if 'jpg' in str(no1[0]) or 'http' in str(no1[0]):
            firstA= 0
            firstB= 1
        elif 'jpg' in str(no1[1]) or 'http' in str(no1[1]):
            firstA = 1
            firstB = 0
        else:
            firstA = 2
            firstB = 2#SKU没有图片的商品,暂时跳过
            continue
        # 计算出双规格裂变数量
        # 获取规格1数量,规格1为中心点，主规格
        num1 = no1[firstA][specValue].__len__()  # 计数从1开始
        # 获取规格2数量，规格二为副规格
        num2 = no1[firstB][specValue].__len__()

#限制双规格数        #如果双规格选项不超过50个，就跳过
        if num1*num2<50:
            print('跳过2')
            continue

        goods=[]
        goods2=[]
        n=1
        for ii,ri in zip(no1[firstA][specValue],range(no1[firstA][specValue].__len__())):
            print(ii)
            if no1[firstB][specValue].__len__()*n<=50:
            # if len(ii)*n<=50:
                goods2.append(ii)
                n+=1
            else:
                n=2
                goods.append(goods2)
                goods2 = []
                goods2.append(ii)
        goods.append(goods2)

        #初始化部分
        Split_set=[]
        #要先知道数据库最后一条数据的ID，在后面添加
        ALL_data_ID = ALL_data[-1][0]
        #获得裂变为几个商品(int)
        howmay=math.ceil(num1*num2/50)
        mother = cur.execute("select * from itemview where 商品編號='%s'" % i[0]).fetchall()
        mother_ID=mother[0][0]

        for iii in range(goods.__len__()):
            new_no1={name:no1[firstA][name],specValue:goods[iii]} #goods[0]只是第一个商品，还有好多需要遍历
            new_no2=no1[firstB]
            new_dataRows1={dataRows:[new_no1,new_no2]} #第一部分已经搞定
            #no2 #这是第二部分
            new_dataRowsOK=[new_dataRows1,no2]
            print(new_dataRowsOK)#得到了商品的商品选项了


            #修改商品核心部分商品选项
            tmap=list(mother[0])
            tmap[12]='%s'%new_dataRowsOK
            #修改标题，首先要知道以功能分为几个商品 名称[加1/5]
            tmap[1]=tmap[1]+' %s/%s'%(iii+1,howmay)
            tmap.pop(0)
            # #修改ID 要先知道数据库最后一条数据的ID，在后面添加
            # ALL_data_ID=ALL_data_ID+1
            # tmap[0]=ALL_data_ID

            new_option=tuple(tmap)
            print(new_option)
            #往数据库中写入
            tables=[]
            for iiii in range(1,tabs.__len__()):
                tables.append(tabs[iiii][1])
            tables=tuple(tables)


            # sql = 'delete  from itemview where ID=%d' % ALL_data_ID
            # cur.execute(sql)

            try:
                sql = "insert into itemview " + str(tables) + "values " + str(new_option)
                if cur.execute(sql):
                    print('插入%s成功'%str(new_option))
                    conn.commit()
                    inst +=1

                else:
                    print(print('插入%s失败'%str(new_option)))
                    inst_erro +=1
            except sqlite3.IntegrityError as e:
                print('插入失败了，错误内容是:%s'%e)
                print()
        # 删旧数据，因为已经有了新数据
        try:
            sql = 'delete  from itemview where ID=%d' % mother_ID
            cur.execute(sql)
            dele+=1
        except:
            print('删除失败！！！')

def connit_():
    #conn.commit()
    print('一共成功新增了%s条数据，新增失败了%s条数据,删除了%s条原商品数据'%(inst,inst_erro,dele))
    conn.commit()
    cur.close()
    conn.close()

connit_()

